/**
 * 函数节流 - 限制函数的执行频率
 * @param {Function} func - 需要节流的函数
 * @param {number} wait - 执行间隔时间（毫秒）
 * @param {boolean} immediate - 是否立即执行第一次
 * @returns {Function} - 节流后的函数
 */
export function throttle(func, wait = 500, immediate = true) {
  let timer = null;
  let lastExecTime = 0;

  return function(...args) {
    const currentTime = Date.now();
    const remaining = wait - (currentTime - lastExecTime);

    // 如果是立即执行模式且距离上次执行时间超过间隔
    if (immediate && (currentTime - lastExecTime >= wait)) {
      func.apply(this, args);
      lastExecTime = currentTime;
    } 
    // 如果不是立即执行模式或距离上次执行时间未超过间隔
    else if (!timer) {
      timer = setTimeout(() => {
        func.apply(this, args);
        lastExecTime = Date.now();
        timer = null;
      }, remaining);
    }
  };
}